package models

import (
	"errors"
	"github.com/astaxie/beego/orm"
	"time"
)

func init() {

}

type Pages struct {
	Page     uint `json:"page"  form:"page"`
	PageSize uint `json:"pageSize" form:"page_size"`
	MaxPages uint `json:"maxPages"  form:"max_pages"`
}

// @Author killerzhangsan
// @Title 版本
// @Description 版本检测
type Version struct {
	Id          uint32 `json:"-"`                                           //发布序列号
	VersionId   uint32 `json:"versionId" orm:"index" form:"version_id"`     //发布版本号
	VersionName string `json:"versionName" orm:"index" form:"version_name"` //发布版本名称
	CreateTime  int64  `json:"createTime"`
	Status      int32  `json:"status"`         //版本状态
	Url         string `json:"url" form:"url"` //下载url

}

// @Author killerzhangsan
// @Title 发布新版本
func PublicVersion(version *Version) error {
	if version.VersionName == "" {
		return errors.New("versionName is not empty")
	}
	version.CreateTime = time.Now().Unix()
	o := orm.NewOrm()
	_, err := o.Insert(version)
	return err
}

// @Author killerzhangsan
// @Title 手动检查最新版本
// @desc 在 expr 前使用减号 - 表示 DESC 的排列
func LastVersion(version *Version) error {
	if version.VersionName == "" {
		return errors.New("versionName is not empty")
	}
	o := orm.NewOrm()
	o.QueryTable("version").
		Filter("VersionName", version.VersionName).
		Limit(1).
		OrderBy("-CreateTime").
		One(version)
	return nil
}

// @Author killerzhangsan
// @Title 所有可用版本
func ListVersion(versionName string, pages Pages) ([]Version, error) {
	var versions []Version
	o := orm.NewOrm()
	_, err := o.QueryTable("version").
		Filter("VersionName", versionName).
		Limit(pages.PageSize, (pages.Page-1)*pages.PageSize).
		All(&versions)
	return versions, err
}

// @Author killerzhangsan
// @Title 检查版本是否可用 首页启动检查
func CheckVersion(version *Version) error {
	if version.VersionName == "" {
		return errors.New("versionName is not empty")
	}
	o := orm.NewOrm()
	err := o.Read(version, "VersionId", "versionName")
	return err
}
